package prac;

import java.util.*;

/****
 小王设计了一个简单的猜字谜游戏，游戏的谜面是一个错误的单词，比如nesw，玩家需要猜出谜底库中正确的单词。猜中的要求如下：
 对于某个谜面和谜底单词，满足下面任一条件都表示猜中：
 （1） 变换顺序以后一样的，比如通过变换w和e的顺序，nwes跟news是可以完全对应的；
 （2）字母去重以后是一样的，比如woood和wood是一样的，它们去重后都是wod
 请你写一个程序帮忙在谜底库中找到正确的谜底。 谜面是多个单词，都需要找到对应的谜底，如果找不到的话，返回“not found”
 */
public class WordGuessingGame {
    public static List<String> findCorrectWords(List<String> puzzles, List<String> answers) {
        List<String> result = new ArrayList<>();
        for (String puzzle : puzzles) {
            boolean found = false;
            for (String answer : answers) {
                if (isMatch(puzzle, answer)) {
                    result.add(answer);
                    found = true;
                    break;
                }
            }
            if (!found) {
                result.add("not found");
            }
        }
        return result;
    }

    private static boolean isMatch(String puzzle, String answer) {
        // 检查变换顺序后是否一样
        char[] puzzleChars = puzzle.toCharArray();
        char[] answerChars = answer.toCharArray();
        Arrays.sort(puzzleChars);
        Arrays.sort(answerChars);
        if (Arrays.equals(puzzleChars, answerChars)) {
            return true;
        }

        // 检查字母去重后是否一样
        Set<Character> puzzleSet = new HashSet<>();
        Set<Character> answerSet = new HashSet<>();
        for (char c : puzzle.toCharArray()) {
            puzzleSet.add(c);
        }
        for (char c : answer.toCharArray()) {
            answerSet.add(c);
        }
        return puzzleSet.equals(answerSet);
    }

    public static void main(String[] args) {
        List<String> puzzles = Arrays.asList("nesw", "woood");
        List<String> answers = Arrays.asList("news", "wood");
        List<String> result = findCorrectWords(puzzles, answers);
        System.out.println(result);
    }
}
